Skip to content

Conversation

@doyeonk429
Copy link
Member

@doyeonk429 doyeonk429 commented Oct 18, 2025

🔗 관련 이슈

📘 작업 유형

  • ✨ Feature (기능 추가)
  • 🐞 Bugfix (버그 수정)
  • 🔧 Refactor (코드 리팩토링)
  • ⚙️ Chore (환경 설정)
  • 📝 Docs (문서 작성 및 수정)
  • ✅ Test (기능 테스트)
  • 🎨 style (코드 스타일 수정)

📙 작업 내역

  • 온보딩 확인 플래그 끌 수 있게 조정

🧪 테스트 내역

  • 브라우저/기기에서 동작 확인
  • 기존 기능 영향 없음

🎨 스크린샷 또는 시연 영상 (선택)

ScreenRecording_10-18-2025.18-45-05_1.mp4

✅ PR 체크리스트

  • 커밋 메시지가 명확합니다
  • PR 제목이 컨벤션에 맞습니다
  • 관련 이슈 번호를 작성했습니다
  • 기능이 정상적으로 작동합니다
  • 불필요한 코드를 제거했습니다

💬 추가 설명 or 리뷰 포인트 (선택)

  • 옵션 추가 밑으로 계속하면 됩니다! 앱 재실행 필요할 경우에는 강제종료 함수 마지막에 호출해주세요~

Summary by CodeRabbit

릴리스 노트

  • 새로운 기능
    • 디버그 메뉴 추가: 기기 흔들기로 접근 가능한 디버그 옵션 메뉴 제공
    • 네트워크 로그 확인 기능 추가
    • 온보딩 상태 초기화 기능 추가 (앱 내에서 온보딩 표시 상태를 초기화 가능)

@coderabbitai
Copy link

coderabbitai bot commented Oct 18, 2025

Walkthrough

온보딩 'seen' 상태를 초기화하는 public API(reset)들이 저장소·도메인·유스케이스 계층에 추가되고, Shake 제스처로 띄우는 디버그 메뉴(네트워크 로그 열기, 온보딩 플래그 초기화)를 구현해 SceneDelegate에서 해당 화면을 표시하도록 변경했습니다.

Changes

Cohort / File(s) 변경 요약
온보딩 리포지토리 구현
src/Projects/BKData/Sources/Repository/DefaultOnboardingRepository.swift
DefaultOnboardingRepositorypublic func resetOnboardingSeen() 추가 — 저장소에 온보딩 키를 false로 저장
온보딩 리포지토리 인터페이스
src/Projects/BKDomain/Sources/Interface/Repository/OnboardingRepository.swift
OnboardingRepository 프로토콜에 func resetOnboardingSeen() 요구사항 추가
온보딩 표시 유스케이스 인터페이스
src/Projects/BKDomain/Sources/Interface/Usecase/MarkOnboardingSeenUseCase.swift
MarkOnboardingSeenUseCase 프로토콜에 func reset() 요구사항 추가
온보딩 표시 유스케이스 구현
src/Projects/BKDomain/Sources/UseCase/DefaultMarkOnboardingSeenUseCase.swift
DefaultMarkOnboardingSeenUseCasepublic func reset() 추가 — 리포지토리의 resetOnboardingSeen() 호출로 위임
디버그 옵션 화면 추가
src/Projects/Booket/Sources/DebugOptionViewController.swift
새 파일 추가: UITableView 기반 디버그 메뉴 구현, 네트워크 로그 열기 및 온보딩 플래그 초기화 옵션 제공, @Autowired MarkOnboardingSeenUseCase 사용
Shake 제스처에서 디버그 화면 표시
src/Projects/Booket/Sources/SceneDelegate.swift
Shake(motionEnded) 핸들러에서 기존 MainViewController 대신 DebugOptionViewController를 루트로 표시하도록 변경 (DEBUG 조건부)

Sequence Diagram(s)

sequenceDiagram
    participant User as 사용자
    participant App as 앱 (SceneDelegate)
    participant Debug as DebugOptionViewController
    participant UseCase as MarkOnboardingSeenUseCase
    participant Repo as OnboardingRepository
    participant Storage as Storage

    User->>App: Shake 제스처
    App->>Debug: 디버그 메뉴 표시
    User->>Debug: "온보딩 플래그 초기화" 선택
    Debug->>UseCase: reset()
    UseCase->>Repo: resetOnboardingSeen()
    Repo->>Storage: onboardingKey = false 저장
    Storage-->>Repo: 저장 완료
    Repo-->>UseCase: 완료 응답
    UseCase-->>Debug: 완료 응답
    Debug->>App: 앱 강제 종료 (forceQuit)
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

주의 검토 포인트:

  • DefaultOnboardingRepository.resetOnboardingSeen()가 기존 저장 방식(키/네임스페이스, 동기/비동기 저장 등)과 일관적인지 확인
  • 유스케이스와 리포지토리 간 에러 처리/예외 흐름(현재는 단순 위임인지, 반환값/throws 여부) 점검
  • DebugOptionViewController의 DEBUG 전처리(Pulse 의존성 포함)와 앱 강제 종료(forceQuitApplication) 구현에 따른 사이드 이펙트 및 앱 스토어 정책 영향 여부 검토
  • SceneDelegate의 motionEnded 변경으로 인한 다른 디버깅/생산 플로우 영향 확인

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 23.53% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title Check ✅ Passed PR 제목 "chore: 디버그 모드 기능 추가"는 변경사항의 핵심을 명확하게 전달합니다. 코드 변경은 디버그 모드 기능 추가라는 주제와 직접적으로 관련이 있으며, 새로운 DebugOptionViewController 클래스 생성, 온보딩 플래그 리셋 기능 구현, 그리고 Shake 제스처 통합이 모두 이를 지원합니다. 제목은 간결하며 동료가 PR 이력을 스캔할 때 주요 변경사항을 빠르게 이해할 수 있도록 합니다.
Linked Issues Check ✅ Passed PR의 모든 주요 코딩 요구사항이 충족되었습니다. 온보딩 플래그 조정 옵션은 리포지토리, 유스케이스 레이어를 통해 구현되었으며 [#232], DebugOptionViewController에서 resetOnboardingSeen 옵션으로 노출되었습니다. 네트워크 로깅 옵션도 DebugOptionViewController에 showNetworkLog로 포함되었고 [#232], Pulse 로그 기능을 호출합니다. SceneDelegate의 shake 제스처 핸들러가 DebugOptionViewController를 표시하도록 수정되어 [#232] 요구사항이 완전히 구현되었습니다.
Out of Scope Changes Check ✅ Passed 모든 변경사항이 연결된 이슈 #232의 범위 내에 있습니다. 온보딩 리셋 기능 구현, 네트워크 로깅 옵션 추가, 디버그 UI 화면 생성, shake 제스처 통합이 모두 정의된 목표와 직접 관련됩니다. forceQuitApplication 기능은 PR 설명에 명시된 "앱 재실행 필요 시 강제종료 함수" 지침과 일치하는 의도된 구현입니다. 범위 외의 변경사항은 발견되지 않습니다.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch BOOK-363-chore/#232

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 0706a96 and 4d9fd08.

📒 Files selected for processing (6)
  • src/Projects/BKData/Sources/Repository/DefaultOnboardingRepository.swift (1 hunks)
  • src/Projects/BKDomain/Sources/Interface/Repository/OnboardingRepository.swift (1 hunks)
  • src/Projects/BKDomain/Sources/Interface/Usecase/MarkOnboardingSeenUseCase.swift (1 hunks)
  • src/Projects/BKDomain/Sources/UseCase/DefaultMarkOnboardingSeenUseCase.swift (1 hunks)
  • src/Projects/Booket/Sources/DebugOptionViewController.swift (1 hunks)
  • src/Projects/Booket/Sources/SceneDelegate.swift (1 hunks)
🧰 Additional context used
🧬 Code graph analysis (4)
src/Projects/BKDomain/Sources/Interface/Usecase/MarkOnboardingSeenUseCase.swift (1)
src/Projects/BKDomain/Sources/UseCase/DefaultMarkOnboardingSeenUseCase.swift (1)
  • reset (16-18)
src/Projects/BKDomain/Sources/UseCase/DefaultMarkOnboardingSeenUseCase.swift (1)
src/Projects/BKData/Sources/Repository/DefaultOnboardingRepository.swift (1)
  • resetOnboardingSeen (25-27)
src/Projects/BKDomain/Sources/Interface/Repository/OnboardingRepository.swift (1)
src/Projects/BKData/Sources/Repository/DefaultOnboardingRepository.swift (1)
  • resetOnboardingSeen (25-27)
src/Projects/Booket/Sources/DebugOptionViewController.swift (2)
src/Projects/BKCore/Sources/DiContainer/DIContainer.swift (1)
  • register (25-46)
src/Projects/BKDomain/Sources/UseCase/DefaultMarkOnboardingSeenUseCase.swift (1)
  • reset (16-18)
🪛 SwiftLint (0.57.0)
src/Projects/Booket/Sources/DebugOptionViewController.swift

[Warning] 18-18: Imports should be unique

(duplicate_imports)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build
🔇 Additional comments (8)
src/Projects/BKDomain/Sources/Interface/Usecase/MarkOnboardingSeenUseCase.swift (1)

7-7: 프로토콜 확장이 깔끔합니다.

온보딩 상태를 재설정하는 reset() 메서드가 프로토콜에 적절하게 추가되었습니다. 기존 execute() 메서드와 일관된 네이밍 스타일을 유지하고 있습니다.

src/Projects/BKDomain/Sources/Interface/Repository/OnboardingRepository.swift (1)

6-6: LGTM!

저장소 프로토콜에 온보딩 상태 초기화 메서드가 올바르게 추가되었습니다. 기존 메서드들과 네이밍이 일관성 있게 유지되고 있습니다.

src/Projects/BKDomain/Sources/UseCase/DefaultMarkOnboardingSeenUseCase.swift (1)

15-18: 구현이 올바릅니다.

UseCase가 Repository로 적절하게 위임하고 있으며, 기존 execute() 메서드와 동일한 패턴을 따르고 있습니다.

src/Projects/Booket/Sources/SceneDelegate.swift (1)

97-97: 디버그 흐름 변경이 적절합니다.

Shake 제스처 시 DebugOptionViewController를 표시하도록 변경이 올바르게 적용되었습니다. DEBUG 플래그로 적절하게 보호되어 있습니다.

src/Projects/BKData/Sources/Repository/DefaultOnboardingRepository.swift (1)

24-27: 저장소 구현이 일관성 있습니다.

resetOnboardingSeen() 구현이 기존 saveOnboardingSeen() 메서드와 동일한 패턴을 따르고 있으며, 올바르게 false 값을 저장하여 온보딩 플래그를 초기화합니다.

src/Projects/Booket/Sources/DebugOptionViewController.swift (3)

27-41: performAction 패턴이 잘 구현되었습니다.

DebugOption enum에서 performAction(on:) 메서드를 사용하여 각 옵션의 동작을 깔끔하게 캡슐화했습니다. 새로운 디버그 옵션 추가 시 확장이 용이한 구조입니다.


55-64: 섹션 데이터 구성이 명확합니다.

디버그 옵션들이 논리적으로 "Log"와 "플래그 초기화" 섹션으로 잘 구분되어 있으며, 향후 옵션 추가가 용이한 구조입니다.


46-46: ---

DI 등록 확인 완료 - 문제 없음

검증 결과, MarkOnboardingSeenUseCasesrc/Projects/BKDomain/Sources/DomainAssembly.swift 156번 줄에서 DI 컨테이너에 올바르게 등록되어 있으며, DefaultMarkOnboardingSeenUseCase로 구현되어 있습니다. 필요한 의존성(OnboardingRepository)도 @Autowired로 정상 주입되고 있습니다. DebugOptionViewController.swift 46번 줄의 @Autowired 프로퍼티는 문제없이 작동합니다.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (2)
src/Projects/BKDomain/Sources/Interface/Usecase/MarkOnboardingSeenUseCase.swift (1)

7-7: 공개 API 메서드에 문서화 추가를 권장합니다.

새로 추가된 reset() 메서드에 문서화 주석이 없습니다. 공개 프로토콜 메서드의 경우 용도와 동작을 설명하는 주석을 추가하면 다른 개발자들이 이해하기 쉽습니다.

다음과 같이 문서화를 추가할 수 있습니다:

 public protocol MarkOnboardingSeenUseCase {
     func execute()
+    /// 온보딩 완료 상태를 초기화합니다.
     func reset()
 }
src/Projects/BKData/Sources/Repository/DefaultOnboardingRepository.swift (1)

25-27: 구현이 올바르고 기존 패턴을 일관되게 따릅니다.

resetOnboardingSeen() 메서드가 saveOnboardingSeen()과 대칭적으로 잘 구현되었으며, 동일한 에러 처리 패턴을 사용합니다.

참고: 원한다면 두 메서드를 하나로 통합하여 코드 중복을 줄일 수 있습니다:

private func setOnboardingSeen(_ seen: Bool) {
    try? storage.save(seen, for: key)
}

public func saveOnboardingSeen() {
    setOnboardingSeen(true)
}

public func resetOnboardingSeen() {
    setOnboardingSeen(false)
}

하지만 현재의 명시적인 구현도 충분히 명확하고 읽기 좋습니다.

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 4d9fd08 and 2b35132.

📒 Files selected for processing (5)
  • src/Projects/BKData/Sources/Repository/DefaultOnboardingRepository.swift (1 hunks)
  • src/Projects/BKDomain/Sources/Interface/Repository/OnboardingRepository.swift (1 hunks)
  • src/Projects/BKDomain/Sources/Interface/Usecase/MarkOnboardingSeenUseCase.swift (1 hunks)
  • src/Projects/BKDomain/Sources/UseCase/DefaultMarkOnboardingSeenUseCase.swift (1 hunks)
  • src/Projects/Booket/Sources/DebugOptionViewController.swift (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (3)
  • src/Projects/BKDomain/Sources/UseCase/DefaultMarkOnboardingSeenUseCase.swift
  • src/Projects/BKDomain/Sources/Interface/Repository/OnboardingRepository.swift
  • src/Projects/Booket/Sources/DebugOptionViewController.swift
🧰 Additional context used
🧬 Code graph analysis (2)
src/Projects/BKData/Sources/Repository/DefaultOnboardingRepository.swift (1)
src/Projects/Booket/Sources/DebugOptionViewController.swift (1)
  • resetOnboardingSeen (94-97)
src/Projects/BKDomain/Sources/Interface/Usecase/MarkOnboardingSeenUseCase.swift (1)
src/Projects/BKDomain/Sources/UseCase/DefaultMarkOnboardingSeenUseCase.swift (1)
  • reset (16-18)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build

@doyeonk429 doyeonk429 merged commit 5838da7 into develop Oct 25, 2025
3 checks passed
@doyeonk429 doyeonk429 deleted the BOOK-363-chore/#232 branch October 25, 2025 10:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BOOK-363/chore] 테스트 플래그 조정 기능 추가

3 participants